package at.ac.tuwien.prog.command.factory;

import at.ac.tuwien.prog.command.ICommand;
import at.ac.tuwien.prog.compiler.ICompiler;
import at.ac.tuwien.prog.parser.IParser;

/**
 * 
 * @author christoph.pickl@student.tuwien.ac.at
 */
public interface ICommandFactory {

	
	/**
	 * 
	 * @param clazz
	 * @return
	 * @see ICompiler#compileSingleCommand(ICommand)
	 */
	int mapIdByClass(Class<? extends ICommand> clazz);
	
	
	/**
	 * 
	 * @param commandId
	 * @param operand1
	 * @param operand2
	 * @return
	 * @see IParser#parseBits(at.ac.tuwien.prog.entity.Register)
	 */
	ICommand newInstanceById(final int commandId, final int operand1, final int operand2);

	
	/**
	 * @param commandName
	 * @param operand1
	 * @param operand2
	 * @return
	 * @see IParser#parseText(String)
	 */
	ICommand newInstanceByName(final String commandName, final int operand1, final int operand2);
	
	
}
